package com.library.dao;

import com.library.entity.Book;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Optional;


@Repository
public interface BookRepository {

    /**
     * ��ѯ�����鼮��
     *
     * @return �����鼮���б�
     */
    List<Book> findAll();

    /**
     * �����鼮ID�����鼮��
     *
     * @param id �鼮��Ψһ��ʶID��
     * @return ƥ��ID���鼮ʵ�壬����Ҳ����򷵻�null��
     */
    Book findById(Long id);

    /**
     * ����������ѯ�鼮��
     *
     * @param query �����ؼ��ʣ�ͨ��Ϊ������
     * @return ƥ���������鼮�б�
     */
    List<Book> findByTitle(String query);

    /**
     * ����һ���µĻ���µ��鼮ʵ�塣
     *
     * @param book ��Ҫ������鼮����
     */
    void save(Book book);

    /**
     * ����ISBN�����鼮��
     *
     * @param isbn �鼮�Ĺ��ʱ�׼��ţ�ISBN����
     * @return ����ҵ�ƥ����鼮������һ�������鼮�� Optional�����򷵻�һ���յ� Optional��
     */
    Optional<Book> findByIsbn(String isbn);

    /**
     * �����������鼮��
     *
     * @param category �鼮��������ơ�
     * @return ƥ�������鼮�б�
     */
    List<Book> findByCategory(String category);

    /**
     * �����鼮IDɾ���鼮��
     *
     * @param id �鼮��Ψһ��ʶID��
     */
    void deleteById(Long id);

    List<Book> findByAuthor(String author);

    List<Book> findByAvailableCopiesGreaterThan(int availableCopies);

    List<Book> findByTitleAndAuthor(String title, String author);

}
